"""
安装 PyMongo
pip install pymongo

Mysql和MongoDB的一些区别：
MySQL            MongoDB
database         database
table(表)        collection(集合)
row（数据）       document（一个JSON格式的字符串）

拓展阅读：
https://xie.infoq.cn/article/180d98535bfa0c3e71aff1662

官方文档：
https://www.mongodb.com/zh-cn/docs/languages/python/pymongo-driver/current/

"""
import pymongo

# 连接MongoDB服务端
client = pymongo.MongoClient("127.0.0.1", 27017)

# 指定数据库, 如果数据库不存在就会创建这个数据库
# db_blog = client.blog
# 另外一种写法
db_blog = client["blog"]
# print(db_blog, type(db_blog))
# 指定集合(类似于MySQL的数据表)
it_blog = db_blog["it_blog"]
# print(it_blog)

# 向集合中插入数据
# it_data = {
#     "title": "一次彻底讲清如何处理mysql 的死锁问题",
#     "author": "friendship",
#     "publish_time": "2024-10-17 15:43",
#     "description": "MySQL 死锁 是指两个或多个事务互相等待对方持有的锁，从而导致所有事务都无法继续执行的现象。在 InnoDB 存储引擎中，死锁是通过锁机制产生的，特别是在并发较高、业务逻辑复杂的情况下，更容易发生死锁。",
#     "content": "MySQL 死锁是数据库在并发场景下常见的问题，特别是对于大规模、复杂的业务系统，死锁问题更为频繁。通过合理的索引设计、保持加锁顺序一致、缩短事务时间、优化锁策略等手段，可以有效减少死锁的发生。同时，当死锁发生时，MySQL 具备死锁检测和自动回滚机制，开发人员可以通过合理的异常处理和重试机制，来提高系统的稳定性和可靠性。秋是慢入的，但冷却是突然的，晴不知夏去，一雨方觉秋深！上海有点冷了。",
#     "views": "100000",
#     "likes": "20000"
# }

# it_data2 = {
#     "title": "一次彻底讲清如何处理mysql 的死锁问题",
#     "author": "friendship",
#     "publish_time": "2024-10-17 15:43",
# }

it_data2 = {
    "title": "一次彻底讲清如何处理mysql 的死锁问题",
    "author": "friendship",
    "publish_time": "2024-10-17 15:43",
    "tags": ["science", "business", "tech"],
    "comments": [
        {"content": "文章写的不错", "commenter": "铁柱", "comment_time": "2024-10-17 15:43"},
        {"content": "分析的很到位", "commenter": "铁柱", "comment_time": "2024-10-17 15:43"},
        {"content": "文章很nice", "commenter": "铁柱", "comment_time": "2024-10-17 15:43"},
    ]
}
# 添加一条数据
res = it_blog.insert_one(it_data2)
print(res, type(res))